// 测试订单列表接口
import axios from 'axios'

// 创建axios实例，使用Vite开发服务器作为代理
const apiClient = axios.create({
  baseURL: 'http://localhost:5173', // Vite开发服务器地址
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 模拟从localStorage获取token的函数
function getTokenFromLocalStorage() {
  // 在Node.js环境中，我们无法直接访问localStorage
  // 用户需要手动输入或设置一个有效的token
  // 在实际浏览器环境中，token会在登录后由后端生成并存储在localStorage中
  // 前端会在请求头中携带此token进行身份验证
  return process.env.TEST_TOKEN || 'your-actual-token-here' // 请替换为真实token
}

// 添加请求拦截器以记录请求信息和添加认证token
apiClient.interceptors.request.use(
  (config) => {
    console.log('发送请求:', {
      method: config.method,
      url: config.url,
      headers: config.headers,
      data: config.data
    })
    
    // 添加认证token到请求头
    const token = getTokenFromLocalStorage()
    if (token && token !== 'your-actual-token-here') {
      config.headers['Authorization'] = `Bearer ${token}`
      console.log('已添加token到请求头')
    } else {
      console.warn('警告: 未设置有效的token，请求可能会被拒绝')
    }
    
    return config
  },
  (error) => {
    console.error('请求配置错误:', error)
    return Promise.reject(error)
  }
)

// 添加响应拦截器以记录响应信息
apiClient.interceptors.response.use(
  (response) => {
    console.log('收到响应:', {
      status: response.status,
      statusText: response.statusText,
      headers: response.headers,
      data: response.data
    })
    return response
  },
  (error) => {
    console.error('响应错误:', {
      status: error.response?.status,
      statusText: error.response?.statusText,
      headers: error.response?.headers,
      data: error.response?.data,
      message: error.message,
      code: error.code
    })
    return Promise.reject(error)
  }
)

// 检查后端服务连接状态
async function checkBackendConnection() {
  try {
    console.log('\n===== 检查后端服务连接 =====')
    
    // 直接检查后端服务8081端口
    console.log('尝试连接后端服务: http://localhost:8081')
    const backendRes = await fetch('http://localhost:8081', {
      method: 'HEAD',
      timeout: 5000
    })
    console.log('后端服务连接成功，状态码:', backendRes.status)
    return true
  } catch (error) {
    console.error('后端服务连接失败:', error.message)
    console.log('请确认:')
    console.log('1. 后端Spring Boot应用是否已启动')
    console.log('2. 后端服务是否运行在8081端口')
    console.log('3. 防火墙是否阻止了连接')
    return false
  }
}

// 测试订单列表接口
async function testOrderListApi() {
  try {
    console.log('\n===== 测试订单列表接口 =====')
    
    // 测试获取订单列表
    console.log('发送请求到: /order/list')
    const response = await apiClient.get('/order/list')
    
    console.log('订单列表接口测试成功!')
    console.log('响应状态码:', response.status)
    console.log('返回的订单数量:', response.data?.length || response.data?.data?.length || 0)
    console.log('订单数据格式:', JSON.stringify(response.data, null, 2))
    
    return response.data
  } catch (error) {
    console.error('订单列表接口测试失败:', error.message)
    
    // 处理常见错误类型
    if (error.code === 'ECONNREFUSED') {
      console.error('无法连接到Vite开发服务器，请确保Vite服务器正在运行')
    } else if (error.response && error.response.status === 403) {
      console.error('403权限错误，这表明您需要先登录获取有效的token')
      console.error('请按照以下步骤操作:')
      console.error('1. 在浏览器中访问应用并完成登录')
      console.error('2. 登录成功后，从浏览器的localStorage中获取token')
      console.error('3. 将获取到的token设置到本脚本的getTokenFromLocalStorage函数中')
      console.error('4. 重新运行测试脚本')
    } else if (error.response) {
      console.error('HTTP错误状态码:', error.response.status)
      console.error('错误响应数据:', error.response.data)
    }
    
    return null
  }
}

// 提供token设置指南
function printTokenGuide() {
  console.log('\n===== Token设置指南 =====')
  console.log('1. 在浏览器中打开应用并登录')
  console.log('2. 按下F12打开开发者工具')
  console.log('3. 切换到Console标签页')
  console.log('4. 输入以下命令并按回车: localStorage.getItem(\'token\')')
  console.log('5. 复制输出的token值')
  console.log('6. 将token粘贴到test-order.js脚本的getTokenFromLocalStorage函数中')
  console.log('7. 重新运行测试脚本')
}

// 运行测试流程
async function runTests() {
  try {
    console.log('开始测试订单API...')
    
    // 检查后端服务连接
    const backendConnected = await checkBackendConnection()
    
    if (backendConnected) {
      // 测试订单列表接口
      await testOrderListApi()
      
      // 提供token设置指南
      printTokenGuide()
    } else {
      console.error('无法建立基本连接，请先确保后端服务正常运行')
    }
    
    console.log('\n所有测试完成')
  } catch (error) {
    console.error('测试流程执行失败:', error)
  }
}

// 运行测试
setTimeout(() => {
  runTests().catch(console.error)
}, 500)